<template>
  <HomePanel ref="target" title="人气推荐" sub-title="人气爆款 不容错过">
    <!-- <template #default> -->
      <ul  class="goods-list">
        <li v-for="item in goods" :key="item.id">
          <RouterLink to="/">
            <img :src="item.picture" alt="">
            <p class="name">{{item.title}}</p>
            <p class="desc">{{item.alt}}</p>
          </RouterLink>
        </li>
      </ul>
    <!-- </template> -->
  </HomePanel>
</template>

<script>
import HomePanel from './home-pannel'
import { findHot } from '@/api/home'
import { ref } from 'vue'
// 导入方法
// import { useIntersectionObserver } from '@vueuse/core'
import { useObserver } from '@/compositions'
export default {
  name: 'HomeHot',
  components: { HomePanel },
  setup () { // 不能把async写在 setup上 ？
    const goods = ref([])
    async function getGoodsList () {
      const res = await findHot()
      console.log('goods', res)
      goods.value = res.result
    }
    // onMounted(() => {
    //   getGoodsList()
    // })

    // 监听视口函数 实现组件懒加载
    // const target = ref(null) // 获取组件实例
    // // 调用方法
    // // 1、stop 可执行方法，用来停止对于目标元素的监听
    // // 2. target 要监听的对象,一个由ref api调用之后形成的RefImpl对象,也可以是一个dom对象
    // // 3. isIntersecting 一个类型为布尔值的数据 当被监听元素进入视口区域时为true,离开视口区域时为false
    // const { stop } = useIntersectionObserver(
    //   target, // target 是观察的目标dom容器，必须是dom容器，而且是vue3.0方式绑定的dom对象
    //   ([{ isIntersecting }], observerElement) => {
    //     // isIntersecting  判断目标元素是否进入视口区
    //     // observerElement 被观察的dom
    //     // 可以使用 isIntersecting 变量是否为true来控制ajax请求是否要发起
    //     console.log(isIntersecting)
    //     if (isIntersecting) {
    //       getGoodsList() // 发送请求获取数据
    //       // 第一次请求成功发起之后立刻停止监听(组件再次消失和出现在视口不再执行回调)
    //       stop() // 停止监听防止重复调用接口
    //     }
    //   }
    // )

    const { target } = useObserver(getGoodsList)

    return { goods, target }
  }

}
</script>

<style scoped lang='less'>
.goods-list {
  display: flex;
  justify-content: space-between;
  height: 426px;
  li {
    width: 306px;
    height: 406px;
    img {
      width: 306px;
      height: 306px;
    }
    p {
      font-size: 22px;
      padding-top: 12px;
      text-align: center;
    }
    .desc {
      color: #999;
      font-size: 18px;
    }
  }
}
</style>
